package com.bestcem.xm.award.dao.mapper;

import com.bestcem.xm.award.dao.mapper.query.ListAwardQuery;
import com.bestcem.xm.award.dao.mapper.query.UpdateAwardQuery;
import com.bestcem.xm.award.entity.mysql.AwardEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 奖励基本数据mapper
 *
 * @author sh.pei <sh.pei@idiaoyan.com>
 * @version v1.0
 * @date 2021/9/14 15:29
 */
@Mapper
public interface AwardEntityMapper {
    /**
     *
     * @date 2021-09-23
     */
    int deleteByPrimaryKey(String awardId);

    /**
     *
     * @date 2021-09-23
     */
    int insert(AwardEntity record);

    /**
     *
     * @date 2021-09-23
     */
    int insertSelective(AwardEntity record);

    /**
     *
     * @date 2021-09-23
     */
    AwardEntity selectByPrimaryKey(String awardId);

    /**
     *
     * @date 2021-09-23
     */
    int updateByPrimaryKeySelective(AwardEntity record);

    /**
     *
     * @date 2021-09-23
     */
    int updateByPrimaryKey(AwardEntity record);

    /**
     * 根据奖励id和开始时间更新奖励
     * @param record
     * @return
     */
    int startAward(AwardEntity record);

    /**
     * 根据奖励id和结束时间更新奖励
     * @param record
     * @return
     */
    int stopAward(AwardEntity record);

    /**
     * 列表查询奖励信息。只返回主表信息
     * @param awardQuery
     * @return
     */
    List<AwardEntity> listAwards(ListAwardQuery awardQuery);

    /**
     * 查询奖励数量
     * @param awardQuery
     * @return
     */
    int countAwards(ListAwardQuery awardQuery);

    /**
     * 根据id软删除奖励
     * @param awardId
     * @param updateTime 修改时间
     * @return
     */
    int remove(String awardId, Date updateTime);

    /**
     * 查询是否已存在重复名称
     * @param name 名称
     * @param projectId 项目id
     * @param awardId 奖励id
     * @return
     */
    int findDuplicateName(@Param("name") String name,@Param("projectId")  String projectId,@Param("awardId")  String awardId);

    /**
     * 实际领取奖励数量+1
     * @param awardId
     * @param updateTime 修改时间
     * @return
     */
    int updateCurCountAddOneById(String awardId, Date updateTime);

    /**
     * 根据id和状态更新奖励信息
     * @date 2021-09-23
     */
    int updateByPrimaryKeyAndOldStatusSelective(UpdateAwardQuery updateAwardQuery);

    /**
     * 批量结束奖励
     *
     * @param awardIds 奖励id list
     * @param endTime  结束时间
     * @return 更新条数
     */
    int batchFinishAwardByIds(List<String> awardIds, Date endTime);

}